package tralala.server.dao;

import java.util.List;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.jdo.Transaction;

import tralala.server.data.Usuario;


public class UsuarioJDO {
private PersistenceManager pm = null;
	
	
	public UsuarioJDO(){
		pm = DAO.getInstance().connect();
	}

	public void guardar(Usuario us){
		Transaction tx = pm.currentTransaction();
		try{
			tx.begin();
			pm.makePersistent(us);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		} finally {
		    if (tx.isActive()) {
		        tx.rollback();
		    }
		}
	}
	
	public void borrar(Usuario us){
		Transaction tx = pm.currentTransaction();
		tx.begin();
		pm.deletePersistent(us);
		tx.commit();
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> get(String nombre, String apellido){
		List<Usuario> listaUsuarios = null;
		Transaction tx = pm.currentTransaction();
		try{
			tx.begin();
			Query query = pm.newQuery("SELECT FROM " + Usuario.class.getName() + " WHERE nombre == '" + nombre + "' & apellido == '" + apellido + "'");
			listaUsuarios = (List<Usuario>)query.execute();
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		} finally {
		    if (tx.isActive()) {
		        tx.rollback();
		    }
		}
		
		return listaUsuarios;
	}
	
	public List<Usuario> getUsuarios(){
		Transaction tx = pm.currentTransaction();
		tx.begin();
		Query query = pm.newQuery("SELECT FROM " + Usuario.class.getName());
		@SuppressWarnings("unchecked")
		List<Usuario> listaUsuarios = (List<Usuario>) query.execute();
		tx.commit();
		
		return listaUsuarios;
	}
	
	public Usuario get(String nick){
		Usuario us = null;
		Transaction tx = pm.currentTransaction();
		try{
			tx.begin();
			Query query = pm.newQuery("SELECT FROM " + Usuario.class.getName() + " WHERE nick == '" + nick + "'");
			query.setUnique(true);
			us = (Usuario)query.execute();
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
		} finally {
		    if (tx.isActive()) {
		        tx.rollback();
		    }
		}
		return us;
	}
}